package org.ehe.erp.service.finance;

import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.erp.domain.finance.ErpFinancePayment;
import org.ehe.erp.domain.finance.bo.ErpFinancePaymentBo;
import org.ehe.erp.domain.finance.vo.ErpFinancePaymentVo;

import java.util.Collection;
import java.util.List;

/**
 * ERP付款单Service
 * @author :zhangnn
 * @className :ErpFinancePaymentServie
 * @description: TODO
 * @date 2025-08-18 14:26:17
 */
public interface ErpFinancePaymentService extends IService<ErpFinancePayment> {
    /**
     * 查询ERP付款单详情
     *
     * @param id 主键
     * @return ErpFinancePaymentVo
     */
    ErpFinancePaymentVo queryById(Long id);

    /**
     * 查询ERP付款单列表
     *
     * @param bo 查询条件
     * @return ErpFinancePaymentVo集合
     */
    List<ErpFinancePaymentVo> queryList(ErpFinancePaymentBo bo);

    /**
     * 分页查询ERP付款单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return TableDataInfo
     */
    TableDataInfo<ErpFinancePaymentVo> queryPageList(ErpFinancePaymentBo bo, PageQuery pageQuery);

    /**
     * 新增ERP付款单
     *
     * @param bo ERP付款单业务对象
     * @return Boolean
     */
    Boolean insertByBo(List<ErpFinancePaymentBo> bo);

    /**
     * 修改ERP付款单
     *
     * @param bo ERP付款单业务对象
     * @return Boolean
     */
    Boolean updateByBo(List<ErpFinancePaymentBo> bo);

    /**
     * 校验并批量删除ERP付款单信息
     *
     * @param ids 主键集合
     * @return Boolean
     */
    Boolean deleteWithValidByIds(Collection<Long> ids);

    /**
     * 审核付款单
     *
     * @param id 付款单ID
     * @return Boolean
     */
    Boolean auditPayment(Long id);

    /**
     * 撤销审核付款单
     *
     * @param id 付款单ID
     * @return Boolean
     */
    Boolean unauditPayment(Long id);

    /**
     * 获取付款单统计信息
     *
     * @return ErpFinancePaymentVo
     */
    ErpFinancePaymentVo getPaymentStatistics();

    /**
     * 根据供应商ID获取付款记录
     *
     * @param supplierId 供应商ID
     * @return List<ErpFinancePaymentVo>
     */
    List<ErpFinancePaymentVo> getPaymentsBySupplier(Long supplierId);

    /**
     * 自动生成付款单号
     *
     * @return String
     */
    String generatePaymentNo(String prefix);

    /**
     * 检查付款单是否可以删除
     *
     * @param id 付款单ID
     * @return Boolean
     */
    Boolean checkCanDelete(Long id);

    /**
     * 检查付款单是否可以审核
     *
     * @param id 付款单ID
     * @return Boolean
     */
    Boolean checkCanAudit(Long id);

    /**
     * 根据付款单号查询付款单名称
     * @param no
     * @return
     */
    ErpFinancePayment queryByNo(String no);
}
